package managers;

import java.sql.SQLException;
import java.util.LinkedList;

import javax.swing.JTable;

import dataBase.DataBaseController;
import dataProviders.BadanieDataProvider;
import dataProviders.NormaDataProvider;
import dataProviders.SamplesDataProvider;

import entities.Norma;
import entities.TypBadan;
import entities.TypProbki;

public class SpecyfikacjaManager {
	private LinkedList<TypProbki> listaTypowProbek;
	private LinkedList<TypBadan> listaTypowBadan;
	private int wybranyTypProbki;
	private int wybranyTypBadania;
	boolean trybDodawaniaTypuBadania;
	String[][] listaNormDlaTypuBadania = null;
	String nazwa = null;
	String cena = null;
	public void setWybranyTypProbki(int nr)
	{
		wybranyTypProbki=nr;
	}
	public void setWybranyTypBadania(int nr)
	{
		wybranyTypBadania = nr;
	}
	public String getNazwaWybranegoTypuProbki()
	{
		return listaTypowProbek.get(wybranyTypProbki).toString();
	}
	public String getNazwaWybranegoTypuBadania()
	{
		if (nazwa==null && !trybDodawaniaTypuBadania)
			nazwa = listaTypowBadan.get(wybranyTypBadania).getNazwa();
		return nazwa;
	}
	public String getCenaWybranegoTypuBadania()
	{
		if(cena==null && !trybDodawaniaTypuBadania)
			cena = listaTypowBadan.get(wybranyTypBadania).getCena()+"";
		return cena;
	}
	public LinkedList<TypBadan> getListaTypowBadan()
	{
		listaTypowBadan = SamplesDataProvider.getListaBadanDlaTypu(listaTypowProbek.get(wybranyTypProbki));
		return listaTypowBadan;
	}
	public LinkedList<TypProbki> getListOfSamplesTypes()
	{
		listaTypowProbek = SamplesDataProvider.getListOfSamplesTypes();
		return listaTypowProbek;
	}
	public void usunTypBadania()
	{
		String sql = "DELETE FROM Typy_badan WHERE typBadaniaID="+listaTypowBadan.get(wybranyTypBadania).getId();
		try {
			DataBaseController.db.dbSqlUpdate(sql);

			DataBaseController.db.dbCommit();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public void dodajTypProbki(String nazwa)
	{
		String sql = "INSERT INTO Typy_probek (nazwa) VALUES ('"+nazwa+"')";
		try {
			DataBaseController.db.dbSqlUpdate(sql);

			DataBaseController.db.dbCommit();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}
	public void edytujTypProbki(String nazwa)
	{
		String sql = "UPDATE Typy_probek SET nazwa='"+nazwa+"' WHERE typProbkiID="+listaTypowProbek.get(wybranyTypProbki).getId();
		try {
			DataBaseController.db.dbSqlUpdate(sql);

			DataBaseController.db.dbCommit();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}
	public void usunTypProbki()
	{
		String sql = "DELETE FROM Typy_probek WHERE typProbkiID="+listaTypowProbek.get(wybranyTypProbki).getId();
		try {
			DataBaseController.db.dbSqlUpdate(sql);

			DataBaseController.db.dbCommit();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}
	public void setTrybDodawaniaTypuBadania(boolean b) {
		trybDodawaniaTypuBadania=b;

	}
	public String[][] pobierzListeNormDlaTypuBadania() {
		if(listaNormDlaTypuBadania==null)
		{
			if(trybDodawaniaTypuBadania)
				listaNormDlaTypuBadania=new String[][]{{"0","200","0","60"}};
			else 
			{
				LinkedList<Norma> listaNorm=NormaDataProvider.pobierzListeNormDlaTypuBadania(listaTypowBadan.get(wybranyTypBadania).getId()) ;
				listaNormDlaTypuBadania=new String[listaNorm.size()][4];
				for(int i=0;i<listaNormDlaTypuBadania.length;i++)
				{
					listaNormDlaTypuBadania[i][0]=listaNorm.get(i).getWiekOd()+"";
					listaNormDlaTypuBadania[i][1]=listaNorm.get(i).getWiekDo()+"";
					listaNormDlaTypuBadania[i][2]=listaNorm.get(i).getNormaOd()+"";
					listaNormDlaTypuBadania[i][3]=listaNorm.get(i).getNormaDo()+"";
				}
			}
		}
		return listaNormDlaTypuBadania;
	}
	public void usunNormeDlaTypuBadania(int wiersz)
	{
		String[][] nowaLista = new String[listaNormDlaTypuBadania.length-1][4];
		for(int i=0,j=0;i<nowaLista.length;i++,j++)
		{
			if(j==wiersz) j++;
			nowaLista[i][0]=listaNormDlaTypuBadania[j][0];
			nowaLista[i][1]=listaNormDlaTypuBadania[j][1];
			nowaLista[i][2]=listaNormDlaTypuBadania[j][2];
			nowaLista[i][3]=listaNormDlaTypuBadania[j][3];
		}
		listaNormDlaTypuBadania=nowaLista;
	}
	public void dodajNormeDlaTypuBadania()
	{
		String[][] nowaLista = new String[listaNormDlaTypuBadania.length+1][4];
		for(int i=0;i<listaNormDlaTypuBadania.length;i++)
		{
			nowaLista[i][0]=listaNormDlaTypuBadania[i][0];
			nowaLista[i][1]=listaNormDlaTypuBadania[i][1];
			nowaLista[i][2]=listaNormDlaTypuBadania[i][2];
			nowaLista[i][3]=listaNormDlaTypuBadania[i][3];
		}
		nowaLista[listaNormDlaTypuBadania.length][0]=0+"";
		nowaLista[listaNormDlaTypuBadania.length][1]=200+"";
		nowaLista[listaNormDlaTypuBadania.length][2]=0+"";
		nowaLista[listaNormDlaTypuBadania.length][3]=100+"";

		listaNormDlaTypuBadania=nowaLista;

	}
	public void wyczyscListeNorm()
	{
		listaNormDlaTypuBadania=null;
		nazwa=null;
		cena=null;

	}
	public void aktualizujDane(JTable table1,String cena,String nazwa) {
		this.cena=cena;
		this.nazwa=nazwa;
		for(int i=0;i<listaNormDlaTypuBadania.length;i++)
			for(int j=0;j<4;j++)
				listaNormDlaTypuBadania[i][j]=(String)table1.getValueAt(i, j);

	}
	public void wprowadzZmianyTypuBadania() {
		int typBadaniaId=-1;
		if(trybDodawaniaTypuBadania)
		{
			String sql = "INSERT INTO Typy_badan (typProbkiId,nazwa,cena) VALUES ("+listaTypowProbek.get(wybranyTypProbki).getId()+",'"+nazwa+"',"+cena+")";
			try {
				DataBaseController.db.dbSqlUpdate(sql);

				DataBaseController.db.dbCommit();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			typBadaniaId=BadanieDataProvider.ostatniTypBadaniaId();

		}
		else
		{
			String sql = "UPDATE Typy_badan SET nazwa='"+nazwa+"',cena="+cena+" WHERE typBadaniaID="+listaTypowBadan.get(wybranyTypBadania).getId();
			try {
				typBadaniaId=listaTypowBadan.get(wybranyTypBadania).getId();
				DataBaseController.db.dbSqlUpdate(sql);

				DataBaseController.db.dbCommit();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			sql = "DELETE FROM Normy_warianty WHERE typBadaniaID="+listaTypowBadan.get(wybranyTypBadania).getId();
			try {
				DataBaseController.db.dbSqlUpdate(sql);

				DataBaseController.db.dbCommit();
			} catch (SQLException e) {
				e.printStackTrace();
			}

		}
		for(int i=0;i<listaNormDlaTypuBadania.length;i++)
		{
			String sql = "INSERT INTO Normy_warianty (typBadaniaId,wiekOd,wiekDo,od,do) VALUES ("+
			typBadaniaId+","+listaNormDlaTypuBadania[i][0]+","+
			listaNormDlaTypuBadania[i][1]+","+listaNormDlaTypuBadania[i][2]+","+listaNormDlaTypuBadania[i][3]+")";
			try {
				DataBaseController.db.dbSqlUpdate(sql);

				DataBaseController.db.dbCommit();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

}
